#!/bin/bash

# FTP客户端示例脚本集合
# 展示各种使用场景和功能

echo "🚀 FTP客户端示例脚本集合"
echo "=========================="

# 设置FTP服务器信息
FTP_HOST="ftp.example.com"
FTP_PORT="21"
FTP_USERNAME="myuser"
FTP_PASSWORD="mypass"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 函数：打印带颜色的消息
print_info() {
    echo -e "${BLUE}ℹ️ $1${NC}"
}

print_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️ $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

# 示例1: 基本文件上传
example_basic_upload() {
    print_info "示例1: 基本文件上传"
    echo "命令: cargo run -p ftp-client -- --host $FTP_HOST --port $FTP_PORT --username $FTP_USERNAME --password $FTP_PASSWORD --upload test_file.txt --local-path test_file.txt"
    echo ""
}

# 示例2: 带MD5校验的文件上传
example_md5_upload() {
    print_info "示例2: 带MD5校验的文件上传"
    echo "命令: cargo run -p ftp-client -- --host $FTP_HOST --port $FTP_PORT --username $FTP_USERNAME --password $FTP_PASSWORD --upload test_file.txt --local-path test_file.txt --checksum md5"
    echo ""
}

# 示例3: 带SHA256校验的文件下载
example_sha256_download() {
    print_info "示例3: 带SHA256校验的文件下载"
    echo "命令: cargo run -p ftp-client -- --host $FTP_HOST --port $FTP_PORT --username $FTP_USERNAME --password $FTP_PASSWORD --download test_file.txt --local-path downloaded_file.txt --checksum sha256"
    echo ""
}

# 示例4: 大文件传输（断点续传）
example_large_file_transfer() {
    print_info "示例4: 大文件传输（断点续传）"
    echo "命令: cargo run -p ftp-client -- --host $FTP_HOST --port $FTP_PORT --username $FTP_USERNAME --password $FTP_PASSWORD --upload large_file.zip --local-path large_file.zip --checksum sha256"
    echo ""
}

# 示例5: 禁用断点续传
example_no_resume() {
    print_info "示例5: 禁用断点续传"
    echo "命令: cargo run -p ftp-client -- --host $FTP_HOST --port $FTP_PORT --username $FTP_USERNAME --password $FTP_PASSWORD --upload file.txt --local-path file.txt --no-resume"
    echo ""
}

# 示例6: 交互模式
example_interactive() {
    print_info "示例6: 交互模式"
    echo "命令: cargo run -p ftp-client -- --host $FTP_HOST --port $FTP_PORT --username $FTP_USERNAME --password $FTP_PASSWORD --interactive"
    echo ""
}

# 示例7: 调试模式
example_debug() {
    print_info "示例7: 调试模式"
    echo "命令: cargo run -p ftp-client -- --host $FTP_HOST --port $FTP_PORT --username $FTP_USERNAME --password $FTP_PASSWORD --upload file.txt --local-path file.txt --debug"
    echo ""
}

# 示例8: 批量文件上传脚本
example_batch_upload() {
    print_info "示例8: 批量文件上传脚本"
    cat << 'EOF'
#!/bin/bash
# 批量文件上传脚本

FTP_HOST="ftp.example.com"
FTP_PORT="21"
FTP_USERNAME="myuser"
FTP_PASSWORD="mypass"

# 文件列表
FILES=("file1.txt" "file2.txt" "file3.txt")

echo "开始批量上传..."

for file in "${FILES[@]}"; do
    echo "上传文件: $file"
    cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --upload "$file" --local-path "$file" --checksum md5
    
    if [ $? -eq 0 ]; then
        echo "✅ $file 上传成功"
    else
        echo "❌ $file 上传失败"
    fi
done

echo "批量上传完成！"
EOF
    echo ""
}

# 示例9: 安全传输脚本
example_secure_transfer() {
    print_info "示例9: 安全传输脚本"
    cat << 'EOF'
#!/bin/bash
# 安全传输脚本 - 使用SHA256校验

FTP_HOST="ftp.example.com"
FTP_PORT="21"
FTP_USERNAME="myuser"
FTP_PASSWORD="mypass"

# 重要文件列表
IMPORTANT_FILES=("database_backup.sql" "config_files.tar.gz" "sensitive_data.zip")

echo "开始安全传输..."

for file in "${IMPORTANT_FILES[@]}"; do
    echo "安全传输文件: $file"
    
    # 上传文件
    cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --upload "$file" --local-path "$file" --checksum sha256
    
    if [ $? -eq 0 ]; then
        echo "✅ $file 安全上传成功"
        
        # 验证下载
        echo "验证文件完整性..."
        cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --download "$file" --local-path "verify_$file" --checksum sha256
        
        if [ $? -eq 0 ]; then
            echo "✅ $file 完整性验证通过"
            rm "verify_$file"  # 清理验证文件
        else
            echo "❌ $file 完整性验证失败"
        fi
    else
        echo "❌ $file 安全上传失败"
    fi
done

echo "安全传输完成！"
EOF
    echo ""
}

# 示例10: 断点续传测试脚本
example_resume_test() {
    print_info "示例10: 断点续传测试脚本"
    cat << 'EOF'
#!/bin/bash
# 断点续传测试脚本

FTP_HOST="ftp.example.com"
FTP_PORT="21"
FTP_USERNAME="myuser"
FTP_PASSWORD="mypass"

# 创建测试文件
echo "创建测试文件..."
dd if=/dev/urandom of=test_large_file.bin bs=1024 count=10240 2>/dev/null  # 10MB文件
echo "测试文件创建完成: test_large_file.bin (10MB)"

# 第一次上传（模拟中断）
echo "第一次上传（模拟中断）..."
timeout 5s cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --upload test_large_file.bin --local-path test_large_file.bin --checksum md5

# 检查部分上传
echo "检查部分上传..."
cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --download test_large_file.bin --local-path partial_file.bin

# 比较文件大小
local_size=$(stat -c%s test_large_file.bin)
partial_size=$(stat -c%s partial_file.bin 2>/dev/null || echo 0)

if [ "$partial_size" -lt "$local_size" ]; then
    echo "✅ 确认文件未完全上传，可以进行断点续传"
    
    # 第二次上传（断点续传）
    echo "第二次上传（断点续传）..."
    cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --upload test_large_file.bin --local-path test_large_file.bin --checksum md5
    
    if [ $? -eq 0 ]; then
        echo "✅ 断点续传测试成功！"
    else
        echo "❌ 断点续传测试失败"
    fi
else
    echo "⚠️ 文件已完全上传，无法测试断点续传"
fi

# 清理测试文件
rm -f test_large_file.bin partial_file.bin
echo "测试文件已清理"
EOF
    echo ""
}

# 示例11: 环境变量配置
example_env_config() {
    print_info "示例11: 环境变量配置"
    cat << 'EOF'
#!/bin/bash
# 使用环境变量配置FTP连接

# 设置环境变量
export FTP_HOST="ftp.example.com"
export FTP_PORT="21"
export FTP_USERNAME="myuser"
export FTP_PASSWORD="mypass"

# 使用环境变量的简化命令
echo "使用环境变量配置的连接..."

# 上传文件
cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --upload file.txt --local-path file.txt --checksum md5

# 下载文件
cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --download file.txt --local-path downloaded_file.txt --checksum sha256

echo "环境变量配置示例完成！"
EOF
    echo ""
}

# 示例12: 错误处理脚本
example_error_handling() {
    print_info "示例12: 错误处理脚本"
    cat << 'EOF'
#!/bin/bash
# 错误处理示例脚本

FTP_HOST="ftp.example.com"
FTP_PORT="21"
FTP_USERNAME="myuser"
FTP_PASSWORD="mypass"

# 函数：处理FTP错误
handle_ftp_error() {
    local exit_code=$1
    local operation=$2
    
    case $exit_code in
        0)
            echo "✅ $operation 成功"
            ;;
        1)
            echo "❌ $operation 失败: 连接错误"
            echo "   请检查服务器地址和端口"
            ;;
        2)
            echo "❌ $operation 失败: 认证错误"
            echo "   请检查用户名和密码"
            ;;
        3)
            echo "❌ $operation 失败: 文件不存在"
            echo "   请检查文件路径"
            ;;
        4)
            echo "❌ $operation 失败: 权限不足"
            echo "   请检查用户权限"
            ;;
        *)
            echo "❌ $operation 失败: 未知错误 (退出码: $exit_code)"
            ;;
    esac
}

# 测试上传
echo "测试文件上传..."
cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --upload test_file.txt --local-path test_file.txt --checksum md5
handle_ftp_error $? "文件上传"

# 测试下载
echo "测试文件下载..."
cargo run -p ftp-client -- --host "$FTP_HOST" --port "$FTP_PORT" --username "$FTP_USERNAME" --password "$FTP_PASSWORD" --download test_file.txt --local-path downloaded_file.txt --checksum sha256
handle_ftp_error $? "文件下载"

echo "错误处理示例完成！"
EOF
    echo ""
}

# 主菜单
show_menu() {
    echo ""
    echo "请选择要查看的示例:"
    echo "1.  基本文件上传"
    echo "2.  带MD5校验的文件上传"
    echo "3.  带SHA256校验的文件下载"
    echo "4.  大文件传输（断点续传）"
    echo "5.  禁用断点续传"
    echo "6.  交互模式"
    echo "7.  调试模式"
    echo "8.  批量文件上传脚本"
    echo "9.  安全传输脚本"
    echo "10. 断点续传测试脚本"
    echo "11. 环境变量配置"
    echo "12. 错误处理脚本"
    echo "0.  退出"
    echo ""
}

# 主循环
while true; do
    show_menu
    read -p "请输入选项 (0-12): " choice
    
    case $choice in
        1) example_basic_upload ;;
        2) example_md5_upload ;;
        3) example_sha256_download ;;
        4) example_large_file_transfer ;;
        5) example_no_resume ;;
        6) example_interactive ;;
        7) example_debug ;;
        8) example_batch_upload ;;
        9) example_secure_transfer ;;
        10) example_resume_test ;;
        11) example_env_config ;;
        12) example_error_handling ;;
        0) 
            print_success "感谢使用FTP客户端示例脚本！"
            exit 0
            ;;
        *)
            print_error "无效选项，请重新选择"
            ;;
    esac
    
    echo ""
    read -p "按回车键继续..."
done
